// -*- coding: utf-8 -*- 
/**
 * Project: AlgorithmsLearn
 *
 * @author: yanking
 * Create time: 2022-03-30 21:42
 * IDE: IntelliJ IDEA
 * Introduction:
 */
package com.LeetCodeT.DateTrain;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

public class BusiestServers {
    /**
     * 最繁忙服务器 -> 暴力轮询
     *
     * @param k:服务器台数
     * @param arrival: 到达时间
     * @param load:    服务器处理任务需要时间
     * @return 返回最繁忙服务器
     */

    public List<Integer> busiestServers(int k, int[] arrival, int[] load) {
        int n = arrival.length, max = 0;
        /*-----初始化服务器-----*/
        int[] service = new int[k], workNum = new int[k];
        tag:
        for (int i = 0; i < n; i++) {
            // 当前任务指定服务器
            int cur = i % k, isLoop = cur;
            while ((service[cur] - arrival[i]) > 0) {
                // 服务器构成一个环，当指定服务器仍然繁忙的时候，需要查找下一个空闲服务器
                cur = (cur + 1) % k;
                if (cur == isLoop) {
                    // 当所有服务器都在工作的时候，丢弃当前的任务
                    continue tag;
                }
            }
            workNum[cur]++;
            max = Math.max(max, workNum[cur]);
            /*
                工作时间是从arrival时间开始的
             */
            service[cur] = arrival[i] + load[i];
        }
        List<Integer> res = new ArrayList<Integer>();
        for (int i = 0; i < k; i++) {
            if (workNum[i] == max) {
                res.add(i);
            }
        }
        return res;
    }


    @Test
    public void shout() {
        int k = 3;
        int[] arrival = {1, 2, 3, 4, 8, 9, 10};
        int[] load = {5, 2, 10, 3, 1, 2, 2};
        System.out.println(busiestServers(k, arrival, load));
    }
}
